package likou;

/**
 * @description: 汉诺塔
 * 思想：
 * 把x柱子上面的圆盘想象成两个部分
 * 先把n-1个圆盘移动到y柱子
 * 然后在把最底下的圆盘移动到z柱子
 *  如果反过来编写代码
 *      如果一个圆盘 直接就是 x->z
 *      如果n个圆盘
 *      代码就是 move(n-1,x,z,y); move(n-1,y,x,z)
 *
 * @title: Hannuo
 * @author: zp
 * @date: 2022/1/15 15:59
 */
public class Hannuo {
    public static void main(String[] args) {
        //盘子的个数 出发 中间 目的
        hanno(3, "X", "Y", "Z");
    }

    public static void hanno(int n, String begin, String mid, String end) {
        if (n == 1) {
            System.out.println(begin + " -> " + end);
        } else {
            hanno(n - 1, begin, end, mid);
            System.out.println(begin + " -> " + end);
            hanno(n - 1, mid, begin, end);
        }
    }
}
/*
最大的问题将X上的三个盘子放到Z上
3个 X->Z
    前2个 X->Y
        前1个 X->Z
        第2个 X->Y
        前1个 Z->Y
    第3个 X->Z
    前2个 Y->Z
        前1个 Y->X
        第2个 Y->Z
        前1个 X->Z
64个 X->Z
    前63个 X->Y
        前62个 X->Z
        第63个 X->Y
        前62个 Z->Y
    第64个 X->Z
    前63个 Y->Z
        前62个 Y->X
        第63个 Y->Z
        前62个 X->Z
*/
